﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WineStore.DAL;
using WineStore.Models;
using System.Data;

namespace WineStore.Controllers
{
    
    public class CategoryController : Controller
    {
        // Show Category
        public ViewResult ShowCategory()
        {
            using (var db = new WineDbContext())
            {
                var categories = from c in db.Categories
                                 orderby c.CategoryId descending
                                 select c;
                return View(categories.ToList());
            }
        }

        // Create Category (Goi tu trang ShowCategory)
        [HttpGet]
        public ActionResult CreateCategory()
        {
            return View();
        }

        // Create Category (Goi tu trang CreateCategory)
        [HttpPost]
        public ActionResult CreateCategory(Category category)
        {
            try
            {
                // Validate in server
                if (ModelState.IsValid)
                {
                    using (var db = new WineDbContext())
                    {
                        db.Entry(category).State = EntityState.Added;
                        db.SaveChanges();
                        return RedirectToAction("ShowCategory", "Category");
                    }
                }
            }
            catch (DataException)
            {
                ModelState.AddModelError("", "Unable to save changes");
            }
            return View(category);
        }

        // Show Detail Category (Goi tu trang ShowCategory)
        [HttpGet]
        public ActionResult EditCategory(int id = 0)
        {
            Category category = null;
            using (var db = new WineDbContext())
            {
                category = db.Categories.Find(id);
                if (category == null)
                {
                    return HttpNotFound();
                }
            }
            return View(category);
        }

        /* Khi phương thức SaveChanges được gọi, cờ Modified làm cho Entity Framework cập nhật dòng tương ứng
           trong CSDL. Tất cả các cột sẽ được cập nhật, bao gồm cả các cột người dùng không thay đổi.*/
        // Edit Category (Goi tu trang Edit Category)
        [HttpPost]
        public ActionResult EditCategory(Category category)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    using (var db = new WineDbContext())
                    {
                        db.Entry(category).State = EntityState.Modified;
                        db.SaveChanges();
                        return RedirectToAction("ShowCategory", "Category");
                    }
                }
            }
            catch (DataException)
            {
                ModelState.AddModelError("", "Unable to save changes");
            }
            return View(category);
        }

        // Delete Category (Goi tu trang Show Category)
        [HttpPost]
        public JsonResult DeleteCategory(int id)
        {
            Category category = null;
            try
            {
                using (var db = new WineDbContext())
                {
                    category = db.Categories.Find(id);
                    db.Entry(category).State = EntityState.Deleted;
                    db.SaveChanges();
                }
            }
            catch (DataException)
            {

            }

            var results = new
            {
                Message = Server.HtmlEncode(category.CategoryName) +
                    " has been removed!",
                Id = id
            };

            return Json(results);
        }

    }
}
